/**
 * 楼层定位功能
 * desc:在每个楼层对象上配置<div class="js-floor-fix storey" data-txt="8F|户外">
 * data-txt:用来制定楼层名称和楼层标题
 * 杨永 20150910
 * 通用组件
 * 使用方式：
 *获取页面中楼层执行floorFix方法
 * 	$(".js-floor-fix").floorFix({
		scrollTopShow:1400,//滚动条滚动到1000的时候开启工具栏定位
		footer:$("footer")//如果这个元素滚动已经超越工具栏就把工具上提
	});
 */
define(function(require){
	var $=require("jq.js");
	
	var FloorFix = function(floors,args){
		
		var _this_ = this;
		
		this.args = {
				scrollTopShow:500,
				footer:null
		};
		
		$.extend(this.args,args);

		//保存页面中楼层集合
		this.floors = floors;
		//保存body
		this.body = $("body");
		
		//创建fixBar
		this.fixBar = $("<div class='g-elevator'>");
		//创建楼层序列
		this.creatFloorItems();
		
		//获取item
		this.itemsBar = this.fixBar.find("li");
		this.itemsBar.click(function(){
			_this_.scrollTo($(this));
		}).mouseover(function(){
			$(this).addClass("hover");
		}).mouseout(function(){
			$(this).removeClass("hover");
		});
		
		//滚动标记
		if(this.args.footer){
			this.pageFooterTop = this.args.footer.offset().top;
		};
		this.winHeight = $(window).height();
		this.itemBarHeight = 30*this.itemsBar.size()/2;
		this.scrollTime = null;
		var isie6 = /MSIE 6.0/gi.test(window.navigator.userAgent);
		$(window).scroll(function(){
			window.clearTimeout(_this_.scrollTime);
			_this_.scrollTime = window.setTimeout(function(){
				_this_.scrollFix();
			},200);
			//如果IE6
			if(isie6){
				_this_.fixBar.css({
								"top":$(document).scrollTop(),
								"margin-top":(_this_.winHeight-_this_.itemBarHeight)/2
								});
			};
		}).resize(function(){
			//浏览器调整大小
			_this_.winHeight = $(window).height();

		});
		
		//设置垂直居中
		if(!isie6){this.fixBar.css("marginTop",-this.itemBarHeight);};
		
		
		//默认页面刷新就执行一次
		this.scrollFix();
	};
	FloorFix.prototype = {
		//滚动监控楼层
		scrollFix:function(){
			
			var _this_ = this;
			
			var scrollTop = $(document).scrollTop(),
				winHeight = this.winHeight;
			
			this.floors.each(function(){
				var offsetTop = $(this).offset().top;
				if((scrollTop>=offsetTop-100)&&(scrollTop<=offsetTop+winHeight/2)){
					var idx = $(this).index();
					//标记楼层索引
					_this_.itemsBar.eq(idx).addClass("current").siblings().removeClass("current");
				};
			});
			
			//判断是否显示
			if(scrollTop>=this.args.scrollTopShow){
				this.fixBar.fadeIn();
			}else{
				this.fixBar.fadeOut();
			};

			//如果配置了底部元素是否超出标记
			if(this.args.footer){
				//如果网站底部新区域出现越过此栏目this.itemBarHeight * 2
				var scrollViewTop = (scrollTop+winHeight)-this.pageFooterTop;
				
				//工具栏距离底部的高度
				var barBottomHeight = (winHeight-this.itemBarHeight*2)/2;
				if(scrollViewTop>0){
					if(barBottomHeight<scrollViewTop){
						var c = Math.abs(barBottomHeight-scrollViewTop)+39;
						this.fixBar.animate({marginTop:-(this.itemBarHeight+c)});
					}else{
						this.fixBar.animate({marginTop:-this.itemBarHeight});
					};
				}else{
					this.fixBar.animate({marginTop:-this.itemBarHeight});
				};	
			};
		},
		//点击跳转到对应楼层
		scrollTo:function(curItem){
			
			var index = curItem.index();
			//标记选中
			curItem.addClass("current").siblings().removeClass("current");
			
			//滚动到相应的楼层
			var top = this.floors.eq(index).offset().top;
			$("body,html").stop().animate({scrollTop:top});

		},
		//创建楼层序列
		creatFloorItems:function(){
			var _this_ = this;
			var ul = $("<ul>");
			var lis = [];
			
			this.floors.each(function(i){
				var msg = $(this).attr("data-txt").split("|");
				if(i!=_this_.floors.size()-1){
					lis.push("<li><a href='javascript:;' target='_self'>"+msg[0]+"</a><a class='txt' href='javascript:;' target='_self'>"+msg[1]+"</a></li>");
				}else{
					lis.push("<li class='last'><a href='javascript:;' target='_self'>"+msg[0]+"</a><a class='txt' href='javascript:;' target='_self'>"+msg[1]+"</a></li>")
				};
				
			});
			
			ul.html(lis.join(""));
			//插入body
			this.fixBar.append(ul);
			this.body.append(this.fixBar);
			
		},
		//重置一下滚动偏移值，用来控制滚动到哪里显示定位条
		setScrollTopShow:function(val){
			this.args.scrollTopShow = val;
			//默认页面刷新就执行一次
			this.scrollFix();
		}
			
	};
	//注册为JQ函数
	$.fn.extend({
		floorFix:function(args){	
			return new FloorFix(this,args);
		}
	});

	//滚动条滚了大于1000的时候就开启
	/*window.setTimeout(function(){
		$(".js-floor-fix").floorFix({
			scrollTopShow:6400,//滚动条滚动到1000的时候开启工具栏定位
			footer:$("footer")//如果这个元素滚动已经超越工具栏就把工具上提
			});
	},10000);*/

});